杨辉三角
前三种,主要考虑时间复杂度; 使用append方法往列表中追加元素,属于多次开辟内存空间第四种,主要考虑空间复杂度, 一次性开辟内存空间
# top.1 从第3行开始实现 triangle = [[1],[1,1]] n = 7 # 定义循环次数 for i in range(2,n): pre = triangle[i-1] # 获取前一行值 浅拷贝 cur = [1] # 定义cur列表 #计算中间数的值 for j in range(0,i-1): cur.append(pre[j]+pre[j+1]) cur.append(1) triangle.append(cur) print(triangle)
# top.2 从第2行开始 triangle = [[1]] n = 7 for i in range(1,n): pre = triangle[i-1] #获取前一行值 cur = [1] # 头部追加 for j in range(0,i-1): # 控制第1次不能进入 cur.append(pre[j]+pre[j+1]) cur.append(1) triangle.append(cur) print(triangle)
# top.3 从空列表开始实现 ---> 只能打印新行(浅拷贝会导致错误) triangle = [] n = 11 oldline = [] newline = [1] print(newline) for i in range(1,n): oldline = newline.copy() # 浅拷贝 oldline.append(0) newline.clear() # 新行清空 浅拷贝清除元素,并不会直接删除元素,而是删除了对象的应用 # 迭代两次将 第二行算出 for j in range(0,i+1): newline.append(oldline[j-1] + oldline[j]) print(newline)
# top.4 一次性开辟内存空间,同时控制内层循环计算的次数 triangle = [] n = 9 for i in range(n): lst = [1] * (i + 1) traiangle.append(lst) if i == 0: continue for j in range(1, i//2 + 1): val = triangle[i - 1][j - 1] + triangle[i - 1][j] lst[j] = val if j != i - j: lst[-j - 1] = val print(triangle)